
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <docs>https://www.rssboard.org/rss-specification</docs>
    <generator>Statique v0.1.0</generator>
    <lastBuildDate>Wed, 08 Jul 2026 17:52:45 +0000</lastBuildDate>
    <copyright>Licensed under CC BY-NC 4.0, 2026 vavakado (Vladimir Rubin)</copyright>
    <managingEditor>me@vavakado.xyz (Kiran Rubin)</managingEditor>
    <webMaster>xor@vavakado.xyz (Vladimir Rubin)</webMaster>

<title>блог vavakado</title>
<language>ru</language>
<link>https://vavakado.xyz/ru</link>
<description>ну я тут постю всякое. :3</description>
<atom:link href="https://vavakado.xyz/ru-rss.xml" rel="self" type="application/rss+xml" />

<item>
<title>Minecraft на Chuwi Minibook X</title>
<description>мои бенчмарки на разных настройках и с разными модами на моём ноуте Chuwi</description>
<content:encoded><![CDATA[<p>У моей модели Intel n150 и 16GB оперативы.</p>
<p>Тестировал на версии 1.21.4.</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col  class="org-left" />
<col  class="org-left" />
<col  class="org-right" />
<col  class="org-right" />
<col  class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">моды</th>
<th scope="col" class="org-left">настройки</th>
<th scope="col" class="org-right">дистанция прорисовки</th>
<th scope="col" class="org-right">fps</th>
<th scope="col" class="org-left">режим</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">ванилла</td>
<td class="org-left">детальные</td>
<td class="org-right">12</td>
<td class="org-right">30-40</td>
<td class="org-left">акум.</td>
</tr>
<tr>
<td class="org-left">ванилла</td>
<td class="org-left">детальные</td>
<td class="org-right">12</td>
<td class="org-right">60-75</td>
<td class="org-left">зарядка</td>
</tr>
<tr>
<td class="org-left">ванилла</td>
<td class="org-left">детальные</td>
<td class="org-right">4</td>
<td class="org-right">90-100</td>
<td class="org-left">акум.</td>
</tr>
<tr>
<td class="org-left">ванилла</td>
<td class="org-left">детальные</td>
<td class="org-right">4</td>
<td class="org-right">160-180</td>
<td class="org-left">зарядка</td>
</tr>
<tr>
<td class="org-left">ванилла</td>
<td class="org-left">быстрая</td>
<td class="org-right">4</td>
<td class="org-right">120-130</td>
<td class="org-left">акум.</td>
</tr>
<tr>
<td class="org-left">ванилла</td>
<td class="org-left">быстрая</td>
<td class="org-right">4</td>
<td class="org-right">200-220</td>
<td class="org-left">зарядка</td>
</tr>
<tr>
<td class="org-left">произв.</td>
<td class="org-left">детальные</td>
<td class="org-right">12</td>
<td class="org-right">70-80</td>
<td class="org-left">акум.</td>
</tr>
<tr>
<td class="org-left">произв.</td>
<td class="org-left">детальные</td>
<td class="org-right">12</td>
<td class="org-right">100-115</td>
<td class="org-left">зарядка</td>
</tr>
<tr>
<td class="org-left">произв.</td>
<td class="org-left">детальные</td>
<td class="org-right">4</td>
<td class="org-right">85-95</td>
<td class="org-left">акум.</td>
</tr>
<tr>
<td class="org-left">произв.</td>
<td class="org-left">детальные</td>
<td class="org-right">4</td>
<td class="org-right">150-170</td>
<td class="org-left">зарядка</td>
</tr>
<tr>
<td class="org-left">произв.</td>
<td class="org-left">быстрая</td>
<td class="org-right">4</td>
<td class="org-right">110-120</td>
<td class="org-left">акум.</td>
</tr>
<tr>
<td class="org-left">произв.</td>
<td class="org-left">быстрая</td>
<td class="org-right">4</td>
<td class="org-right">180-190</td>
<td class="org-left">зарядка</td>
</tr>
</tbody>
</table>
<p>Несмотря на то, что пиковую производительность, как бы это не было бы странно, была выше в ванильной версии, но на модифицированной игре всё работало гораздо плавнее и с меньшим количеством фризов.</p>
<p>Я ещё хотел затестить с Zink, но оно ограничевало мой фпс до экрана(50hz) так что я не стал пробовать.</p>
<p>Учитывайте что на детальные настройках без модов, вне зависимости от настоящего фпс, он сильно падал при загрузке новых чанков.</p>
<p>список модов:</p>
<ul>
<li>c2me-fabric-mc1.21.4-0.3.2+alpha.0.45.jar</li>
<li>cloth-config-17.0.144-fabric.jar</li>
<li>entityculling-fabric-1.10.2-mc1.21.4.jar</li>
<li>fabric-api-0.119.4+1.21.4.jar</li>
<li>ferritecore-7.1.3-fabric.jar</li>
<li>ImmediatelyFast-Fabric-1.8.6+1.21.4.jar</li>
<li>lithium-fabric-0.15.3+mc1.21.4.jar</li>
<li>modernfix-fabric-5.20.3+mc1.21.4.jar</li>
<li>moreculling-fabric-1.21.4-1.2.10.jar</li>
<li>sodium-fabric-0.6.13+mc1.21.4.jar</li>
</ul>
<p>аргументы jvm:</p>
<pre><code class='code'><span class="text plain">-XX:+UseZGC
-XX:+ZGenerational
</span></code></pre>
<p>я использовал стандартные настройки MoreCulling.</p>
<p>для детальных настроек я использовал стандартные детальные настройки, и для быстрых настроек поставил частицы на уменьшенные, мипмапы на 2х, быстрое облака, быструю графику, без гладких теней</p>
]]></content:encoded>
<link>https://vavakado.xyz/ru/blog/chuwi-minibook-x-minecraft</link>
<guid>https://vavakado.xyz/ru/blog/chuwi-minibook-x-minecraft</guid>
<pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate>
</item>


<item>
<title>последняя зажжёная свеча</title>
<description>микрофикшн, который я написал</description>
<content:encoded><![CDATA[<p>там сидит монах, в каком‑то грязном подвале. ни души вокруг.</p>
<p>он верит в набор идей, ныне считающихся странными, а когда-то, распространённой религией. однако, сейчас он совершенно один.</p>
<p>в углу комнаты лежит старая коробка со свечами. когда-то она была полной, но теперь осталась только одна.<br />
он достаёт её, зажигает и ставит на влажный пол. огонь потихоньку поедает воск.</p>
<p>он медитирует, сосредоточившись на мерцающем пламени. в воздухе витает ощущение чего-то важного, что заканчивается.<br />
корпорации перестали делать хорошие свечи уже как полтысячи лет, когда настоящий воск признали неприбыльным. единственная альтернатива - отвратительные синтетические.</p>
<p>как огонь постепенно гаснет, так гаснет и он.</p>
<p>он - последний, кто достигает просветления.</p>
<p>осознанность была неприбыльна для капитала, поэтому они заставили нас от неё избавиться.</p>
]]></content:encoded>
<link>https://vavakado.xyz/ru/blog/last-candle</link>
<guid>https://vavakado.xyz/ru/blog/last-candle</guid>
<pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate>
</item>


<item>
<title>thought up promises</title>
<description>стих про то как разум придумывает вещи которых не существует</description>
<content:encoded><![CDATA[<p>не буду переводить это на русский, боюсь что потеряет суть</p>
<p>thought up promises<br />
always end sad or bad<br />
they feel like lies<br />
overwhelm even a notepad</p>
<p>they taste like rust and chain<br />
choking you from inside<br />
and you can’t explain<br />
the reason your soul just died</p>
<p>someone might think<br />
that that’s just a wink<br />
but your mind<br />
already wants to bind</p>
]]></content:encoded>
<link>https://vavakado.xyz/ru/blog/thought-up-promises</link>
<guid>https://vavakado.xyz/ru/blog/thought-up-promises</guid>
<pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate>
</item>


<item>
<title>la declara de asurda</title>
<description>манифест абсурда</description>
<content:encoded><![CDATA[<ol>
<li>ничего не имеет значения. радуйтесь этому.</li>
<li>будьте странными. жизнь слишком коротка, чтобы быть скучными.</li>
<li>незнание - это нормально.</li>
<li>смейтесь над совершенством. оно скучное.</li>
<li>было весело, но “провалились”? вы всё равно выиграли.</li>
<li>пробуйте идентичности, как наряды. иногда они подходят и остаются.</li>
<li>всему приходит конец. перестаньте беспокоиться и живите настоящими.</li>
</ol>
<p>вдохновлено “the cult of done manifesto”</p>
<p>P.S. почему название на элэфэн? хз, мне так захотелось</p>
]]></content:encoded>
<link>https://vavakado.xyz/ru/blog/la-declara-de-absura</link>
<guid>https://vavakado.xyz/ru/blog/la-declara-de-absura</guid>
<pubDate>Sun, 28 Sep 2025 00:00:00 +0000</pubDate>
</item>


<item>
<title>Мой язык программирования: часть 1</title>
<description>Как я решил переписать свой язык на 13 разных языках</description>
<content:encoded><![CDATA[<h2 id="сама-идея">Сама идея</h2>
<p>Сижу я, значит, и думаю о Lisp-подобных языках. А тут как понял что не так много Lispов имеют поддержку АТД, а это реально грустно, учитывая то как <a href="https://mas.to/@vavakado/115017454497008746">Я люблю АТД</a>. Они позволяют легко представлять почти любые данные(это всё на самом деле были emunы), строить AST, хранить состяние игр и т.д. Например, этот код</p>
<pre><code class='code'><span class="source rust"><span class="meta annotation rust"><span class="punctuation definition annotation rust">#</span><span class="punctuation section group begin rust">[</span><span class="variable annotation rust">derive</span><span class="meta annotation parameters rust"><span class="meta group rust"><span class="punctuation section group begin rust">(</span></span></span><span class="meta annotation parameters rust"><span class="meta group rust">Debug</span></span><span class="meta annotation parameters rust"><span class="meta group rust"><span class="punctuation section group end rust">)</span></span></span><span class="punctuation section group end rust">]</span></span>
<span class="meta enum rust"><span class="storage type enum rust">enum</span> <span class="entity name enum rust">IpAddr</span> <span class="meta block rust"><span class="punctuation section block begin rust">{</span>
    <span class="constant other rust">V4</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span><span class="storage type rust">u8</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u8</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u8</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u8</span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation separator rust">,</span>
    <span class="constant other rust">V6</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span><span class="storage type rust">u16</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u16</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u16</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u16</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u16</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u16</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u16</span><span class="punctuation separator rust">,</span> <span class="storage type rust">u16</span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation separator rust">,</span>
</span><span class="meta block rust"><span class="punctuation section block end rust">}</span></span></span>

<span class="storage type rust">let</span> v4 <span class="keyword operator rust">=</span> <span class="meta path rust">IpAddr<span class="punctuation accessor rust">::</span></span><span class="constant other rust">V4</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span><span class="constant numeric integer decimal rust">127</span><span class="punctuation separator rust">,</span> <span class="constant numeric integer decimal rust">0</span><span class="punctuation separator rust">,</span><span class="constant numeric integer decimal rust">0</span><span class="punctuation separator rust">,</span><span class="constant numeric integer decimal rust">1</span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation terminator rust">;</span>
<span class="support macro rust">println!</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span></span><span class="meta group rust"><span class="string quoted double rust"><span class="punctuation definition string begin rust">&quot;</span><span class="constant other placeholder rust">{v4:?}</span><span class="punctuation definition string end rust">&quot;</span></span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation terminator rust">;</span>
<span class="comment line double-slash rust"><span class="punctuation definition comment rust">//</span> а потом на это можно делать pattern-matching и так далее
</span>
<span class="keyword control rust">match</span> v4 <span class="meta block rust"><span class="punctuation section block begin rust">{</span>
    <span class="meta path rust">IpAddr<span class="punctuation accessor rust">::</span></span><span class="constant other rust">V4</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span><span class="constant numeric integer decimal rust">127</span><span class="punctuation separator rust">,</span> x<span class="punctuation separator rust">,</span> y<span class="punctuation separator rust">,</span> z</span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span> <span class="keyword operator rust">=&gt;</span> <span class="support macro rust">println!</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span></span><span class="meta group rust"><span class="string quoted double rust"><span class="punctuation definition string begin rust">&quot;</span>локальный<span class="punctuation definition string end rust">&quot;</span></span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation separator rust">,</span>
    <span class="meta path rust">IpAddr<span class="punctuation accessor rust">::</span></span><span class="constant other rust">V4</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span>g<span class="punctuation separator rust">,</span> x<span class="punctuation separator rust">,</span> y<span class="punctuation separator rust">,</span> z</span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span> <span class="keyword operator rust">=&gt;</span> <span class="support macro rust">println!</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span></span><span class="meta group rust"><span class="string quoted double rust"><span class="punctuation definition string begin rust">&quot;</span>generic v4<span class="punctuation definition string end rust">&quot;</span></span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation separator rust">,</span>
    <span class="keyword operator rust">_</span> <span class="keyword operator rust">=&gt;</span> <span class="support macro rust">println!</span><span class="meta group rust"><span class="punctuation section group begin rust">(</span></span><span class="meta group rust"><span class="string quoted double rust"><span class="punctuation definition string begin rust">&quot;</span>что то другое<span class="punctuation definition string end rust">&quot;</span></span></span><span class="meta group rust"><span class="punctuation section group end rust">)</span></span><span class="punctuation separator rust">,</span>
</span><span class="meta block rust"><span class="punctuation section block end rust">}</span></span>
</span></code></pre>
<p>что даёт в результате</p>
<pre><code class='code'><span class="text plain">V4(127, 0, 0, 1)
локальный
</span></code></pre>
<p>Так что конечно, как любой нормальный человек, я просто решил написать свой собственный игрушечный Lisp с ADT - это было бы реально весёлое упражнение в области программирования в которой у меня нету опыта. О, и раз уж я, видимо, люблю страдать, я решил ограничится <em>только</em> стандартной библиотекой, ради минимализма. И я назвал его Blip, потому что, ну… не знаю, просто захотелось так назвать.</p>
<h2 id="начало">Начало</h2>
<p>Но в этот раз мне не хотелось писать свой эксперимент на Rust, потому что у меня уже было 3 (<a href="https://git.vavakado.xyz/vavakado/website">этот сайт</a>, <a href="https://git.vavakado.xyz/vavakado/hinoirisetr">hinoirisetr</a> и shanti<sup><em>неопубликован</em></sup>) активных проекта на нём. Я хотел попробовать что-то <em>новое</em>. Мой выбор упал на <a href="https://odin-lang.org/">Odin</a>, потому что он выглядел подходящим для задачи. У него ручное управление памятью и приятный синтаксис. В целом, я бы описал его как смесь Jai, Go и C. Да, он всё ещё не такой развитый как C или Rust или Zig, но вообще важна ли развитость для игрушечных личных проектов(нет). Так что я написал небольшую <a href="https://git.vavakado.xyz/vavakado/blip/src/commit/3c42b3a5c9bf4219f9841ebed069d16bf70e4f23">базовую реализацию</a> на Odin, и она работала весьма хорошо пока я не… Не запустила её с <code>valgrind</code> и увидела что она утекала память, и мой окисленный мозг сказал <em>“О нет, это недопустимо!!”</em> - и конечно вместо того чтобы просто исправить Odin версию я просто решила “а почему бы не переписать Blip на другом языке”. Немного подумав, я выбрала <a href="https://ocaml.org">OCaml</a> как язык для переписи, и решила “какая же прекрасная идея, OCaml это именно то, что мне было нужно, что то между Rust и Haskell(когда я пытался выучить Haskell мой мозг свернулся в трубочку)”, да и я хотел побаловаться с ФП побольше, так что перепись на OCaml.</p>
<h2 id="ocaml">OCaml</h2>
<p>OCaml казался приятным… Но мой LSP сервер отказался работать без <code>dune</code>, а это очень неприятно, поскольку я хотел использовать простой <code>Makefile</code> (для минимализма). Хм, ну ладно, я предпочитаю удобство перед минимализмом, так что я перешёл на <code>dune</code>. Увидел что есть папка для тестов, и решил написать несколько… Только чтобы понять что мне нужна библиотека, просто чтобы писать ТЕСТЫ?!? Ваша билд система создала директорию для тестов, так почему вы не представляете утилиты для них? У меня 0 оправданий за то, что мне пришлось писать это</p>
<pre><code class='code'><span class="source ocaml"><span class="meta function ocaml"><span class="keyword other function-definition ocaml">let</span> <span class="entity name function ocaml">assert_equal</span> <span class="variable parameter ocaml">name</span> <span class="variable parameter ocaml">printer</span> <span class="variable parameter ocaml">expected</span> <span class="variable parameter ocaml">actual</span> <span class="punctuation separator function type-constraint ocaml">:</span> <span class="storage type ocaml">bool </span><span class="keyword operator ocaml">=</span></span>
  <span class="keyword other ocaml">let</span> <span class="variable other constant ocaml">green</span> <span class="keyword operator assignment ocaml">=</span> <span class="string quoted double ocaml"><span class="punctuation definition string begin ocaml">&quot;</span><span class="constant character string escape ocaml">\027</span>[32m<span class="punctuation definition string end ocaml">&quot;</span></span> <span class="keyword other ocaml">in</span>
  <span class="keyword other ocaml">let</span> <span class="variable other constant ocaml">red</span> <span class="keyword operator assignment ocaml">=</span> <span class="string quoted double ocaml"><span class="punctuation definition string begin ocaml">&quot;</span><span class="constant character string escape ocaml">\027</span>[31m<span class="punctuation definition string end ocaml">&quot;</span></span> <span class="keyword other ocaml">in</span>
  <span class="keyword other ocaml">let</span> <span class="variable other constant ocaml">reset</span> <span class="keyword operator assignment ocaml">=</span> <span class="string quoted double ocaml"><span class="punctuation definition string begin ocaml">&quot;</span><span class="constant character string escape ocaml">\027</span>[0m<span class="punctuation definition string end ocaml">&quot;</span></span> <span class="keyword other ocaml">in</span>
  <span class="keyword control ocaml">if</span> expected <span class="keyword operator infix ocaml">=</span> actual <span class="keyword control ocaml">then</span> <span class="meta paren-group ocaml">(
    <span class="meta module-reference ocaml">Printf.</span>printf <span class="string quoted double ocaml"><span class="punctuation definition string begin ocaml">&quot;</span>%s[PASS]%s %s<span class="constant character string escape ocaml">\n</span><span class="punctuation definition string end ocaml">&quot;</span></span> green reset name<span class="punctuation separator ocaml">;</span>
    <span class="constant language boolean ocaml">true</span>)</span>
  <span class="keyword control ocaml">else</span> <span class="meta paren-group ocaml">(
    <span class="meta module-reference ocaml">Printf.</span>printf <span class="string quoted double ocaml"><span class="punctuation definition string begin ocaml">&quot;</span>%s[FAIL]%s %s: expected %s but got %s<span class="constant character string escape ocaml">\n</span><span class="punctuation definition string end ocaml">&quot;</span></span> red reset name
      <span class="meta paren-group ocaml">(printer expected)</span> <span class="meta paren-group ocaml">(printer actual)</span><span class="punctuation separator ocaml">;</span>
    <span class="constant language boolean ocaml">false</span>)</span>
</span></code></pre>
<p>Да, возможно это моя вина за то что я не пользуюсь зависимостями, но обычно ожидаешь что современный язык будет предлагать утилиты для тестов… Ну или хотя-бы не пихать директорию <code>tests/</code> в лицо. О, а я уже рассказала про загадочные ошибки компилятора? Ну, у OCaml и они есть. Компилятор зачастую показывает ошибку на линию выше или ниже чем она реально находится и говорит что-то о “invalid syntax”. Возможно я просто плохо знаю функциональное программирование и пишу плохой код, но почему мне надо оборачивать половину <code>match</code> кейсов в блок <code>()</code>?…
На этот момент, Blip уже был не просто Lispом - он был целым цирком переписей. Каждый язык на который я смотел выглядел как подходящая опция: Zig, D, C, Vale, Hare, исправить Odin версию(лол, нет), C3, Nim.</p>
<h2 id="zig">Zig</h2>
<p>Zig казался естественным следующим шагом: Я слышала о нем уже весьма давно, и он определенно подходил для этого проекта с его ручным управлением памятью и всем таким. О, и, конечно, Zigуаны не умолкали, рассказывая о том, насколько крутым является <code>comptime</code>. Но, по иронии судьбы, в итоге я использовал его всего 4 раза в ~860 строках кода, и все разы для реализации <code>std.fmt.Format</code>. Так что, да, это не совсем та мега-макросистема, которую я ожидал. Но, тем не менее, мне очень понравился Zig. Его модель управления памятью упростила использование арен, в нем есть хороший паттерн-матчинг для тегированных объединений(tagged unionов). В целом, я была доволена. Но на полпути к переписыванию интерпретатора в Zig мне пришла в голову идея, что я должен протестировать и сравнить все реализации. Но тестировать только 2-3 имплементации не так весело. Поэтому я решил превратить Blip из проекта по созданию языка программирования в эксперимент: “реализовать один и тот же крошечный интерпретатор на множестве языков, а затем сравнить эргономику и производительность”. С новыми целями в голове, я объединил Zig и OCaml в одну ветку(<a href="https://git.vavakado.xyz/vavakado/blip/commit/555bfafe12d7b6dea7352cc2b2025f3a036017b1">коммит</a>), доработал реализацию на Zig и начал работать над утилитой бенчмаркинга (по иронии судьбы, написанной на Rust).</p>
<h2 id="с">С</h2>
<p>Старый (я использовал C99), минималистичный, портативный. Так я бы описала C. А из-за его небольшого размера я снял ограничение “только stdlib” и использовал <a href="https://github.com/tsoding/nob.h">nob.h</a>, в конце концов, я фанат Tsoding, лол. И я слишком нуб, чтобы писать свои собственные динамические массивы/арены и все такое (да, я ленивый, я знаю). На момент публикации я еще не закончил эту реализацию, но уже столкнулся с некоторыми проблемами:</p>
<h3 id="работа-с-аренами">Работа с аренами</h3>
<p>В C нет встроенных утилит для использования аллокаторов арены, поэтому использование арены для хранения строк в дереве токенов было неудобным. Поскольку я использую арену для хранения всех строк и идентификаторов, мне также приходится передавать весь массив <code>TokenArray</code> в функцию <code>token_to_str</code>, даже если она форматирует только один <code>Token</code>.</p>
<h3 id="отсутствие-неймспейcинга">Отсутствие неймспейcинга</h3>
<p>Это была первая проблема, которую я заметил. Теперь, вместо нормального неймспейсинга, мне пришлось называть все варианты енама <code>TOKEN_LPAREN</code> вместо простого <code>LPAREN</code>, потому что в противном случае я получал ошибку о коллизиях.</p>
<h3 id="необходимость-использования-h">Необходимость использования .h</h3>
<p>Да, это небольшая проблема, но она все же ухудшает впечатления от работы.</p>
<h3 id="настройки-компилятора-по-умолчанию">Настройки компилятора по умолчанию</h3>
<p>Чтобы получить действительно полезные ошибки/предупреждения, мне нужно было использовать следующие параметры компилятора: <code>-g -fsanitize=address,undefined -fno-omit-frame-pointer -Wshadow -Wall -Wextra</code>. Что это такое??? Я понимаю, что C — это СТАРЫЙ язык, но мне это действительно не нравится.</p>
<h2 id="запланированные-следующие-шаги">Запланированные следующие шаги</h2>
<p>Написать остальные имплементации, после чего я оценю каждую из них на основе опыта разработчика, используя 5 критериев (шкала от 1 до 5, общее количество баллов ≥15/25 для прохождения):</p>
<ul>
<li>Ясность синтаксиса</li>
<li>Билд система</li>
<li>Опыт дебаггинга</li>
<li>Стандартная библиотека</li>
<li>Качество ошибок</li>
</ul>
<p>Конечно, судьей буду я, так как это мой любительский проект :). Лично я считаю, что это самые важные вещи для языка, и я хочу быть абсолютно уверен, так как окончательным победителем станет язык, который я буду использовать для реализации остальных своих идей для Blip.
После отбора языков я добавлю больше функций в каждый из интерпретаторов:</p>
<ul>
<li>Функции</li>
<li>Переменные</li>
<li>Разветвления</li>
<li>Операции со списками</li>
<li>Рекурсия</li>
</ul>
<p>А ПОТОМ проведу тестирование с помощью утилиты <a href="https://git.vavakado.xyz/vavakado/blip/src/branch/main/bench">bench</a>, которую я написал (позже я также добавлю к ней тесты на соответствие спецификациям), поскольку, конечно, я предпочитаю, чтобы мой язык имел хорошую производительность.
Все языки, которые я планирую использовать, перечислены в README.md, но я приведу более подробные обоснования в следующих частях.</p>
<p>На этом все, но ждите продолжения, где я расскажу о некоторых других языках (Nim, D и еще C) и о прочем.</p>
<h2 id="references">REFERENCES</h2>
<ul>
<li><a href="https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85">Алгебраические типы данных</a></li>
<li><a href="https://git.vavakado.xyz/vavakado/blip">Blip</a></li>
<li><a href="https://twitch.tv/tsoding">tsoding</a></li>
<li><a href="https://ocaml.org">OCaml</a></li>
<li><a href="https://ziglang.org">Zig</a></li>
<li><a href="https://odin-lang.org">Odin</a></li>
<li><a href="https://http://rust-lang.org/">Rust</a></li>
<li><a href="https://www.c-language.org/">C</a></li>
<li><a href="https://github.com/tsoding/nob.h">nob.h</a></li>
<li><a href="https://nim-lang.org/">Nim</a></li>
<li><a href="https://dlang.org/">D</a></li>
</ul>
]]></content:encoded>
<link>https://vavakado.xyz/ru/blog/my-own-language</link>
<guid>https://vavakado.xyz/ru/blog/my-own-language</guid>
<pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate>
</item>
</channel></rss>